package com.aynu.likou.day4_22;


/**
 * @author mj
 * @create 2021-04-20 15:59
 * @describe: 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
 */
public class HeBingYouXuLianBiao2 {
    public static void main(String[] args) {
        ListNode listNode1 = new ListNode(1);
        listNode1.next = new ListNode(2);
        listNode1.next.next = new ListNode(3);

        ListNode listNode2 = new ListNode(1);
        listNode2.next = new ListNode(2);
        listNode2.next.next = new ListNode(3);

        ListNode listNode = mergeTwoLists(listNode1, listNode2);

        while (listNode.next != null) {
            System.out.print(listNode.val);
            if (listNode.next.next != null) {
                System.out.println(" ->> ");
            }
            listNode = listNode.next;
        }
    }

    public static ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        ListNode node = new ListNode(0);
        //定义辅助指针，防止链表丢失
        ListNode cur = node;

        while (l1 !=null && l2 != null){
            if (l1.val < l2.val){
                cur.next = l1;
                cur = cur.next;
                l1 = l1.next;
            }else {
                cur.next = l2;
                cur = cur.next;
                l2 = l2.next;
            }
        }

        //运行到了最后肯定有一个节点无法满足循环条件，所以连接最后的节点
        if (l1==null){
            cur.next = l2;
        }else {
            cur.next = l1;
        }

        return node;
    }
}